<?php

class Portal_m extends CI_Model {

    public function __construct() {
        parent::__construct();
        $this->load->database();
    }

    public function generarUsuario($username){
        $data = array(
            'idusuario' => $username,
        );
        $this->db->insert('usuarios', $data);
    }
    
    function getPendientes($usuario){
        return $this->getFormulariosPendientes($this->getPersona($usuario));   
    }
    
    function getHistoricos($usuario){
        return $this->getFormulariosHistoricos($this->getPersona($usuario));   
    }
    
    function fomulariosPorEstado($lista,$estado){
        $retorno[]=array();
        $i=1;
        foreach ($lista as $value) {
            if($value['idEstado']==$estado){
                $retorno[$i]= array( 
                    'id'=>$value['idFormularioPM'],
                    'nombre'=>$value['nombre']
                );
                $i++;
            }
        }
        return $retorno;
    }
            
    function getConfirmar($usuario){
        return $this->getFormulariosAConfirmar($usuario,$this->getPersona($usuario)); 
    }
    
    function arrayToString($vector){
        $retorno = '"';
        $i = 0;
        while ($i < count($vector)) {
            $retorno.=$vector[$i];
             $i++;
            if($i<count($vector))
                $retorno.='","';
        }
        $retorno.='"';
        return $retorno;
        
    }
            
    function getAceptar($usuario){
        $forms=$this->fomularioAaceptar($usuario, $this->getProcesosDelUsuario($usuario));        
        $i=0;
        $retorno=array();
        while($i<count($forms['forms'])) {
            $query=$this->db->query("SELECT idFormularioPM,e.nombre as equipo,p.nombre as proceso
                        ,".$forms['equipos'][$i]." as idEquipoUsuario
                        FROM  formulariopm f 
                        join equipos e using(idEquipo)
                        join procesos p using(idProceso)
                        where idFormularioPM in (".$forms['forms'][$i].")");            
            $retorno[$i]=$query->result_array();
            $i++;       
        }        
        return $retorno;
    }
    
    function getFormulariosHistoricos($idPersona){
        $query=$this->db->query("SELECT idFormularioPM,e.nombre,p.nombre as proceso,cat.nombre as estado
                                FROM  formulariopm f 
                                join equipos e using(idEquipo)
                                join procesos p using(idProceso)
                                join cat_valorcatalogo cat on(f.idEstado=cat.idValorCatalogo and cat.idTipoCatalogo='1')
                                where f.idEstado not in ('1','2','3','4') and 
                                f.idEquipo in (
                                    SELECT idEquipo 
                                    FROM equipos_personas 
                                    where idpersona='$idPersona'
                                )");
        return $query->result_array();
    }
            
    function getFormulariosPendientes($idPersona){
        $query=$this->db->query("SELECT idFormularioPM,e.nombre,p.nombre as proceso
                                FROM  formulariopm f 
                                join equipos e using(idEquipo)
                                join procesos p using(idProceso)
                                where f.idEstado='1' and f.idEquipo in (SELECT idEquipo 
                                FROM equipos_personas where idpersona='$idPersona')");
        return $query->result_array();
    }
    
    function getFormulariosAConfirmar($idusuario,$idPersona){
         $query=$this->db->query("SELECT idFormularioPM,e.nombre,p.nombre as proceso
                                FROM  formulariopm f 
                                join equipos e using(idEquipo)
                                join procesos p using(idProceso)
                                where f.idEstado='3' 
                                and  f.idEquipo in (SELECT idEquipo FROM equipos_personas where idpersona='$idPersona')
                                and f.idFormularioPM not in (Select idFormularioPM FROM confirmaciones where idUsuario='$idusuario')");
                
         return $query->result_array();
    }
            
    function getEquipos($usuario){
        $idPersona=$this->getPersona($usuario);
        $this->db->select('idEquipo');
        $this->db->from('equipos_personas');
        $this->db->where('idPersona',$idPersona);
        $query=$this->db->get();
        return $query->result_array();
    }
    
    function getPersona($usuario){
        
        $this->db->select('idPersona');
        $this->db->from('usuarios');
        $this->db->where('idUsuario',$usuario);
        $consulta=$this->db->get();
        $row=$consulta->row();
        $variable=$row->idPersona;
        return $variable;
    }
    
     public function getConfirmacionesEquipo($idFormPM){
        $this->db->select('idConfirmacion');
        $this->db->from('confirmaciones');
        $this->db->where('idFormularioPM', $idFormPM);
        $query=$this->db->get();
        return $query->num_rows();
    }
    
    public function getProcesosDelUsuario($usuario){
        $query=$this->db->query("SELECT idProceso FROM usuarios pu
                        join equipos_personas ep using(idPersona)
                        join  formulariopm f using(idEquipo)
                        join procesos p using(idProceso)
                        where idUsuario='$usuario'
                        and p.idEstado='2'
                        group by idProceso;");
        return $query->result_array();
    }
    
    public function getArbolPM($idProceso){        
        $this->db->select('idArbolRelacion');
        $this->db->from('procesos');
        $this->db->join('configproceso', 'configproceso.idConfigProceso= procesos.idConfigProceso');
        $this->db->join('configequipos', 'configequipos.idConfigEquipo= configproceso.idConfigEquipo');
        $this->db->join('arbolespm', 'arbolespm.idarbolPM = configequipos.idarbolPM');
        $this->db->where('idProceso', $idProceso);
        $query=$this->db->get();
        $row = $query->row();
        $var= $row->idArbolRelacion;
        return $var;
    }
    
    public function fomularioAaceptar($usuario,$procesos){
        $forms=array();
        $equipos2=array();
        $retForm=array();
        $retorno=array();
        foreach ($procesos as $value){
            $config=  $this->getTipoAceptacion($value['idProceso']);
            $idArbol= $this->getArbolPM($value['idProceso']);
            $equipos= $this->getEquipos($usuario);
            switch ($config) {
                case 4:
                    //360 / Todos aceptan
                    $retForm=$this->getFormularios360($usuario,$idArbol,$equipos,$value['idProceso']);
                    $forms= $this->unificarArrayInvertido($forms,$retForm,'form');
                    $equipos2= $this->unificarArrayInvertido($equipos2,$retForm,'equipo');
                    break;
                case 1:
                   // Solo aceptan Jefes
                    $retForm=$this->getFormularios90($usuario,$idArbol,$equipos,$value['idProceso']);
                    $forms= $this->unificarArrayInvertido($forms,$retForm,'form');
                    $equipos2= $this->unificarArrayInvertido($equipos2,$retForm,'equipo');
                    break;
                case 2:
                   // Solo aceptan Pares
                    $retForm=$this->getFormulariosPares($usuario,$idArbol,$equipos,$value['idProceso']);
                    $forms= $this->unificarArrayInvertido($forms,$retForm,'form');
                    $equipos2= $this->unificarArrayInvertido($equipos2,$retForm,'equipo');
                    break;
                case 3:
                    // Solo aceptan subalternos
                    $retForm=$this->getFormulariosInferior($usuario,$idArbol,$equipos,$value['idProceso']);
                    $forms= $this->unificarArrayInvertido($forms,$retForm,'form');
                    $equipos2= $this->unificarArrayInvertido($equipos2,$retForm,'equipo');
                    break;
                default:
                    // el resto con ifs
                    break;
            }
        }
        $retorno['forms']=$forms;
        $retorno['equipos']=$equipos2;
        return $retorno;
    }
    
     public function getMinimoAceptacion($idProceso){
        $query=  $this->db->query("SELECT idMinimoAceptacion FROM procesos p
                                    join configproceso cp using(idConfigProceso)
                                    join configflujos cf using(idConfigFlujo)
                                    where idProceso='$idProceso'");
        $row = $query->row();
        return  $row->idMinimoAceptacion;
    }
    public function getTipoAceptacion($idProceso){
        $query=  $this->db->query("SELECT idTipoAceptacion FROM procesos p
                                    join configproceso cp using(idConfigProceso)
                                    join configflujos cf using(idConfigFlujo)
                                    where idProceso='$idProceso'");
        $row = $query->row();
        return  $row->idTipoAceptacion;
    }
    
    public function equipoEnArbol($idEquipo,$idArbol){
        $query=$this->db->query("SELECT idArbolRelacion 
                                    FROM arbolrelaciones
                                    where idArbolRelacion='$idArbol' and idEquipo='$idEquipo'");
        if($query->num_rows()<1){
            return false;
        }
        return true;
    }

    public function getFomularioDeEquipo($equipos,$idProceso){
        
        $query=$this->db->query("SELECT idFormularioPM FROM formulariopm
                                where idProceso='$idProceso' and idEstado='4' 
                                and idEquipo=(".$this->arrayToString($equipos).")
                                and idFormularioPM not in(
                                    SELECT idFormularioPM FROM aceptaciones 
                                    where idUsuario='".$usuario."'
                                )");
        return $query->result_array();
        
    }
    
    public function getFomulariosDeEquipos($usuario,$equipos,$idProceso,$idEquipo){
        
        $query=$this->db->query("SELECT f.idFormularioPM,'$idEquipo' as idEquipoUsuario FROM formulariopm f
                                where f.idProceso='$idProceso' and f.idEstado='4' 
                                and idEquipo  in (".$this->arrayToString($equipos).")
                                and not exists(
                                    SELECT a.idFormularioPM FROM aceptaciones a 
                                    where a.idUsuario='".$usuario."'
                                    and a.idEquipoUsuario='$idEquipo'
                                    and a.idFormularioPM=f.idFormularioPM )");
        return $query->result_array();
        
    }
    
    public function unificarArray($ret,$vector,$str){
        $retorno=$ret;
        $i = 0;
        while ($i<count($vector)) {
            if($str=='')
                array_push($retorno, $vector[$i]);
            else
                array_push($retorno, $vector[$i][$str]);
            $i++;
        }
        return $retorno;
    }
    
    public function unificarArrayInvertido($ret,$vector,$str){
        $retorno=$ret;
        $i = 0;
        while ($i<count($vector[$str])) {                
            
            array_push($retorno, $vector[$str][$i]);
            $i++;
        }
        return $retorno;
    }

    public function getFormularios360($usuario,$idArbol,$equipos,$idProceso){
        $retornoEquipos=array();
        $retorno=array();
        $unico=array();
        $equiposUsuario=array();
        $formulariosUsuario=array();
        foreach ($equipos as $value) {            
            $retornoEquipos=array();
            if($this->equipoEnArbol($value['idEquipo'],$idArbol)){
                $retornoEquipos=$this->unificarArray($retornoEquipos,$this->getEquipos90Superior($idArbol,$value['idEquipo']),'idEquipo');
                $retornoEquipos=$this->unificarArray($retornoEquipos,$this->getEquipos90Inferior($idArbol,$value['idEquipo']),'idEquipo');
                $retornoEquipos=$this->unificarArray($retornoEquipos,$this->getEquipos180($idArbol,$value['idEquipo']),'idEquipo');
            }
            unset($unico);
            $unico=$this->getFomulariosDeEquipos($usuario,$retornoEquipos,$idProceso,$value['idEquipo']);
            if(!empty($unico)){
                $formulariosUsuario=$this->unificarArray($formulariosUsuario,$unico,'idFormularioPM');
                $equiposUsuario=$this->unificarArray($equiposUsuario,$unico,'idEquipoUsuario');
            }
            unset($retornoEquipos);
        }
        $retorno['form']=$formulariosUsuario;
        $retorno['equipo']=$equiposUsuario;
        return $retorno;
    }
     public function getFormularios90($usuario,$idArbol,$equipos,$idProceso){
        $retornoEquipos=array();
        $retorno=array();
        $unico=array();
        $equiposUsuario=array();
        $formulariosUsuario=array();
        foreach ($equipos as $value) {            
            $retornoEquipos=array();
            if($this->equipoEnArbol($value['idEquipo'],$idArbol)){
               $retornoEquipos=$this->unificarArray($retornoEquipos,$this->getEquipos90Inferior($idArbol,$value['idEquipo']),'idEquipo');
               
            }
            unset($unico);
            $unico=$this->getFomulariosDeEquipos($usuario,$retornoEquipos,$idProceso,$value['idEquipo']);
            if(!empty($unico)){
                $formulariosUsuario=$this->unificarArray($formulariosUsuario,$unico,'idFormularioPM');
                $equiposUsuario=$this->unificarArray($equiposUsuario,$unico,'idEquipoUsuario');
            }
            unset($retornoEquipos);
        }
        $retorno['form']=$formulariosUsuario;
        $retorno['equipo']=$equiposUsuario;
        return $retorno;
    }
       public function getFormulariosInferior($usuario,$idArbol,$equipos,$idProceso){
        $retornoEquipos=array();
        $retorno=array();
        $unico=array();
        $equiposUsuario=array();
        $formulariosUsuario=array();
        foreach ($equipos as $value) {            
            $retornoEquipos=array();
            if($this->equipoEnArbol($value['idEquipo'],$idArbol)){
               $retornoEquipos=$this->unificarArray($retornoEquipos,$this->getEquipos90Superior($idArbol,$value['idEquipo']),'idEquipo');
               
            }
            unset($unico);
            $unico=$this->getFomulariosDeEquipos($usuario,$retornoEquipos,$idProceso,$value['idEquipo']);
            if(!empty($unico)){
                $formulariosUsuario=$this->unificarArray($formulariosUsuario,$unico,'idFormularioPM');
                $equiposUsuario=$this->unificarArray($equiposUsuario,$unico,'idEquipoUsuario');
            }
            unset($retornoEquipos);
        }
        $retorno['form']=$formulariosUsuario;
        $retorno['equipo']=$equiposUsuario;
        return $retorno;
    }
    public function getFormulariosPares($usuario,$idArbol,$equipos,$idProceso){
        $retornoEquipos=array();
        $retorno=array();
        $unico=array();
        $equiposUsuario=array();
        $formulariosUsuario=array();
        foreach ($equipos as $value) {            
            $retornoEquipos=array();
            if($this->equipoEnArbol($value['idEquipo'],$idArbol)){
               $retornoEquipos=$this->unificarArray($retornoEquipos,$this->getEquipos180($idArbol,$value['idEquipo']),'idEquipo');
               
            }
            unset($unico);
            $unico=$this->getFomulariosDeEquipos($usuario,$retornoEquipos,$idProceso,$value['idEquipo']);
            if(!empty($unico)){
                $formulariosUsuario=$this->unificarArray($formulariosUsuario,$unico,'idFormularioPM');
                $equiposUsuario=$this->unificarArray($equiposUsuario,$unico,'idEquipoUsuario');
            }
            unset($retornoEquipos);
        }
        $retorno['form']=$formulariosUsuario;
        $retorno['equipo']=$equiposUsuario;
        return $retorno;
    }
    public function getEquipos360($idArbol,$idEquipo){
        $retorno=array();
        $retorno=$this->unificarArray($retorno,$this->getEquipos90Superior($idArbol,$idEquipo),'idEquipo');
        $retorno=$this->unificarArray($retorno,$this->getEquipos90Inferior($idArbol,$idEquipo),'idEquipo');
        $retorno=$this->unificarArray($retorno,$this->getEquipos180($idArbol,$idEquipo),'idEquipo');
        
        return $retorno;
    }
    public function getJefes($idArbol,$idEquipo){
        $retorno=array();
        $retorno=$this->unificarArray($retorno,$this->getEquipos90Superior($idArbol,$idEquipo),'idEquipo');
     
          return $retorno;
    }
     public function getSupervisados($idArbol,$idEquipo){
        $retorno=array();
        $retorno=$this->unificarArray($retorno,$this->getEquipos90Inferior($idArbol,$idEquipo),'idEquipo');
     
          return $retorno;
    }
     public function getPares($idArbol,$idEquipo){
        $retorno=array();
        $retorno=$this->unificarArray($retorno,$this->getEquipos180($idArbol,$idEquipo),'idEquipo');
     
          return $retorno;
    }

    public function getEquipos90Superior($idArbol,$idEquipo){  
      $query=$this->db->query("SELECT idEquipoPadre as idEquipo 
                               FROM arbolrelaciones
                               where idArbolRelacion='$idArbol' and idEquipo='$idEquipo'
                                and idEquipo!=idEquipoPadre");
      return $query->result_array();
    }
    
    public function getEquipos90Inferior($idArbol,$idEquipo){
        $query=$this->db->query("SELECT idEquipo FROM arbolrelaciones
                                where idArbolRelacion='$idArbol' and idEquipoPadre='$idEquipo'
                                 and idEquipo!=idEquipoPadre");
      return $query->result_array();
    }
    
    public function getEquipos180($idArbol,$idEquipo){
        $query=$this->db->query("SELECT idEquipo FROM arbolrelaciones
                                where idArbolRelacion='$idArbol' and idEquipo!='$idEquipo'
                                and idEquipoPadre in (SELECT idEquipoPadre FROM arbolrelaciones
                                                    where idArbolRelacion='$idArbol' and idEquipo='$idEquipo')
                                and nivel in (SELECT nivel FROM arbolrelaciones
                                            where idArbolRelacion='$idArbol' and idEquipo='$idEquipo')");
        return $query->result_array();
        
    }
    
    
       
    
 

}